package com.fivefu.core.camera.services;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fivefu.core.camera.entity.DbMonitorCamera;
import com.baomidou.mybatisplus.extension.service.IService;
import com.fivefu.core.camera.vo.response.CameraDistributeVo;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 探头表 服务类
 * </p>
 *
 * @author 
 * @since 2022-09-19 13:48:32
 */
public interface DbMonitorCameraService extends IService<DbMonitorCamera> {

    /**
     * 通过探头编号查询探头信息
     * @param cameraCode 探头编号
     * @return
     */
    DbMonitorCamera queryMonitorCameraByCode(String cameraCode);

    /**
     * 编辑探头信息
     * @param camera 探头信息
     * @param userid 操作用户编号
     */
    void editMonitorCamera(DbMonitorCamera camera,String userid);

    /**
     * 修改探头在线状态
     * @param id 探头编号
     * @param onlineStatus 在线状态
     */
    void changeCameraOnlineStatus(Long id, String onlineStatus);

    /**
     * 查询探头列表
     * @return
     */
    List<DbMonitorCamera> queryMonitorCameraList();

    /**
     * 查询探头部分数据列表
     * @param cameraIDs 探头主键id集合
     * @return
     */
    List<DbMonitorCamera> queryMonitorCameraPartList(List<Long> cameraIDs);

    /**
     * 查询探头列表
     * @param cameraName 探头名称(模糊)
     * @param cameraCode 探头编号(模糊)
     * @param cameraType 探头类型
     * @param areaid 所属城区
     * @param streetid 所属街道
     * @param cameraStatus 探头状态
     * @param cameraManufacturer 厂商
     * @param codeList 包含探头编号集合
     * @param excludeCodeList 排除探头编号集合
     * @param page 页码
     * @param limit 数量
     * @return
     */
    Page<DbMonitorCamera> queryCameraList(String cameraName, String cameraCode,String cameraType, String areaid, String streetid,String cameraStatus,String onlineStatus, String cameraManufacturer,
                                                 List<String> codeList, List<String> excludeCodeList, Integer page, Integer limit);



    /**
     *
     * 格式化探头信息
     * @param camera
     */
    Map<String,Object> formatMonitorCamera(DbMonitorCamera camera);

    /**
     *
     * 根据探头编号获取监控点位
     *
     */
    List<CameraDistributeVo> queryMonitorPoint(List<Long> cameraIDs);

    /**
     *
     * 监控点详情
     * @param cameraId 探头id
     */
    Map<String, Object> queryMonitorPointDetail(Long cameraId);

    /**
     *
     * 通过探头id集合查询其探头编号
     * @param ids
     */
    List<String> queryCameraCodesByIds(List<Long> ids);

    /***
     * 获取探头云图点位分布
     * @param cameraName    探头名称
     * @return
     */
    Map<String,Object> getCameraCloudDistribute(String cameraName);
}
